/*gulp 插件的学习：
* 通常来说：gulp是通过管道pipe结合插件进行使用的。
* 源文件 --pipe--> 插件处理 ----pipe---> 目标文件或其他处理
* 所以插件的学习很重要。
* */


/*gulp-sass(sass插件)、browser-sync(浏览器同步插件)、 之前已经介绍，这个demo不做介绍*/


/* gulp-uglify：js压缩插件， 安装：npm install gulp-uglify --save-dev*/
var gulp = require('gulp'); // 基础库
var uglify = require('gulp-uglify'); // js压缩
gulp.task('script', function() {
  return gulp.src('src/js/before/**/*.js') // 指明源文件路径、并进行文件匹配
    .pipe(uglify({ preserveComments:'some' })) // 使用uglify进行压缩，并保留部分注释
    .pipe(gulp.dest('src/js/after')); // 输出路径:文件名还是和之前的一样
});


/*rename：文件重命名插件，如上面例子，我们压缩之后就可以命名为.min后缀*/
var rename = require("gulp-rename");
gulp.task('rename', function() {
  return gulp.src('src/js/before/**/*.js') // 指明源文件路径、并进行文件匹配
  	.pipe(rename({suffix:".min"}))
    .pipe(uglify({ preserveComments:'some' })) // 使用uglify进行压缩，并保留部分注释
    .pipe(gulp.dest('src/js/after')); // 输出路径:文件名变为firstJS.min.js
});


/*gulp-changed: 只操作有修改过的文件，
*	例如你在一大推js文件夹里面，修改了某一个js文件，该插件可以单独为修改的文件重新执行任务
*	通过查看文件的修改日期，可以发现，没有使用gulp-changed插件的，是重新生成； 使用的话，是没有重新生成的
*/
var changed = require("gulp-changed");
gulp.task('changed', function() {
  return gulp.src('src/js/before/**/*.js') // 指明源文件路径、并进行文件匹配
  	.pipe(rename({suffix:".min"}))  //不能放在changed的后面
  	.pipe(changed("src/js/after")) //判断文件是否有被改动（此处与输出路径一致）
    .pipe(uglify({ preserveComments:'some' })) // 使用uglify进行压缩，并保留部分注释
    .pipe(gulp.dest('src/js/after')); // 输出路径:文件名变为firstJS.min.js
});


/*gulp-concat: 合并文件，
* 例如为了减少网络请求，可以合并多个js库
*/
var concat = require("gulp-concat");
gulp.task("concat",["changed"],function(){
	gulp.src("src/js/after/*.min.js") //要合并的文件
	.pipe(concat("lastResult.js")) 	//合并之后的文件名
	.pipe(gulp.dest("src/js/after"));
});


/**
 *还有一些常用的插件： 
 *链接：http://gold.xitu.io/entry/55c8dbb160b22a3ebdf34d57
 *
 * 
 */
